package cn.yhbk.entrance;

import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.IFill;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import com.baomidou.mybatisplus.generator.fill.Column;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import static com.baomidou.mybatisplus.annotation.FieldFill.INSERT;
import static com.baomidou.mybatisplus.annotation.FieldFill.INSERT_UPDATE;

/**
 * 使用教程
 * 把当前工具类放到  application主程序同级包下
 * 1.修改连接数据库
 * 2.修改文件输出路径  System.getProperty("user.dir") =  D:\项目练习\云E办\cloudApi\cloude-api-parent
 * 3.设置mapper映射文件的输出绝对路径
 * 4.修改表名集合
 * 5.添加需要填充的字段名
 * 6.表名前缀
 * 7.
 */



public class AutoGenerator {
    public static void main(String[] args) {
        System.out.println(System.getProperty("user.dir"));
        //==============  1  ===============
        FastAutoGenerator.create("jdbc:mysql://111.230.113.146:3306/bursary","root","rootbursary123.")
                .globalConfig(builder -> {
                    builder
                            .author("有何不可")//设置作者
                            .enableSwagger()   //开启swagger模式
                            //多模块开发时，在src前面需要添加模块名，user.dir只能获取到父模块的文件夹
                            .outputDir(System.getProperty("user.dir")+"/web/src/main/java");
                            //.fileOverride();   //覆盖已经生成过的代码,已经迁移到策略配置中
                })
                .packageConfig(builder -> {
                    builder
                            .parent("cn.yhbk.web")    //设置父包名
                            //==============  2  ===============
                            .moduleName("modules.manager")  //这里写你的第三层包的报名
                            .mapper("Mapper")
                            .service("Service")
                            .serviceImpl("Service.Impl")
                            .controller("Controller")
                            .entity("Pojo.Entity")
                            //如果这里的xml报错，那就修改generator的版本
                            .pathInfo(Collections.singletonMap(OutputFile.xml
                                    //==============  3  ===============
                                    ,"D:\\迁移\\大创项目\\奖学金评定系统\\DecideBursary\\Web\\src\\main\\resources\\mapper\\manager"));
                })
                .strategyConfig(builder -> {
                    //表名集合
                    List<String> tablesName = new ArrayList<>();
                    //==============  4  ===============


                    tablesName.add("bursary_record");


//                    //需要自动填充的字段集合
                    //==============  5  ===============
                    List<IFill> fillList = new ArrayList<>();
                    fillList.add(new Column("create_time",INSERT));
                    fillList.add(new Column("update_time",INSERT_UPDATE));

                    builder

                            //==============  4  ===============
                            .addInclude(tablesName)  //设置需要生成实体类的表明
                            //==============  6  ===============
                            .entityBuilder()
                            //.enableFileOverride()    // 是否需要文件覆盖,不需要注释即可
                            //==============  5  ===============
                            //.logicDeleteColumnName("deleted")
                            //.logicDeletePropertyName("deleted")
                            .enableLombok()
                            .enableTableFieldAnnotation()

                            .addTableFills(fillList)   //需要自动填充的字段
                            //.fileOverride()

                            .naming(NamingStrategy.underline_to_camel)   //将表名转换为以下划线分隔
                            .columnNaming(NamingStrategy.underline_to_camel)  //将字段名转换为以下划线分隔


                            .controllerBuilder()
                            .enableRestStyle()     //开启生成@RestController注解
                            .enableHyphenStyle()    //开启驼峰转连字符

                            .mapperBuilder()
                            .enableBaseResultMap()
                            .enableBaseColumnList()
                            .enableMapperAnnotation();  //开启@Mapper注解


                })
                .templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板，默认的是Velocity引擎模板
                .execute();

    }

}